package jun.work.io;

import java.io.Closeable;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;

public class FileZipUtils {
	/**
	 * @Description: TODO
	 * @param srcs
	 *            待压缩的文件集合
	 * @param zipDest
	 *            压缩文件
	 * @author xujun
	 * @date 2013-7-29 上午10:13:31
	 */
	public static void compressFiles(File[] srcs, File zipDest) {
		ZipOutputStream zos = null;
		OutputStream os = null;
		InputStream is = null;
		try {
			zos = new ZipOutputStream(new FileOutputStream(zipDest));
			byte[] buff = new byte[1024];
			for (File f : srcs) {
				is = new FileInputStream(f);
				ZipEntry entry = new ZipEntry(f.getName());
				zos.putNextEntry(entry);
				int len;
				while ((len = is.read(buff)) != -1) {
					zos.write(buff, 0, len);
				}
				zos.closeEntry();
				is.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			close(is);
			close(os);
			close(zos);
		}
	}

	public static void close(Closeable c) {
		if (c != null) {
			try {
				c.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	public static void ZipFiles(java.io.File[] srcfile, java.io.File zipfile) {
		byte[] buf = new byte[1024];
		try {
			ZipOutputStream out = new ZipOutputStream(new FileOutputStream(
					zipfile));
			for (int i = 0; i < srcfile.length; i++) {
				FileInputStream in = new FileInputStream(srcfile[i]);
				out.putNextEntry(new ZipEntry(srcfile[i].getName()));
				int len;
				while ((len = in.read(buf)) > 0) {
					out.write(buf, 0, len);
				}
				out.closeEntry();
				in.close();
			}
			out.close();
			System.out.println("压缩完成.");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 解压缩
	 * 
	 * @param zipfile
	 *            File 需要解压缩的文件
	 * @param descDir
	 *            String 解压后的目标目录
	 */
	public static void UnZipFiles(java.io.File zipfile, String descDir) {
		try {
			ZipFile zf = new ZipFile(zipfile);
			for (Enumeration entries = zf.entries(); entries.hasMoreElements();) {
				ZipEntry entry = ((ZipEntry) entries.nextElement());
				String zipEntryName = entry.getName();
				InputStream in = zf.getInputStream(entry);
				OutputStream out = new FileOutputStream(descDir + zipEntryName);
				byte[] buf1 = new byte[1024];
				int len;
				while ((len = in.read(buf1)) > 0) {
					out.write(buf1, 0, len);
				}
				in.close();
				out.close();
				System.out.println("解压缩完成.");
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
